CloudFormation으로 API Gateway 생성 시 발생하는 The REST API doesn’t contain any methods 문제 해결

CloudFormation으로 API Gateway 생성 시 발생하는 The REST API doesn’t contain any methods 문제 해결

CloudFormation으로 API Gateway 생성 시 발생하는 The REST API doesn’t contain any methods 문제를 해결하는 방법에 대해 정리해 봤습니다.

Clock Icon2024.07.03

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFormation으로 API Gateway 생성 시 발생하는 The REST API doesn’t contain any methods 문제를 해결하는 방법에 대해 정리해 봤습니다.

문제 발생

jw-apiclofrerror-1
API Gateway를 생성하는 CloudFormation 스택을 생성했더니 에러가 발생했습니다.
에러 내용으로는 다음과 같습니다.

The REST API doesn't contain any methods

현재 CloudFormation에서는 REST API 유형의 API Gateway를 생성하는 코드를 포함하고 있습니다. 하지만 이 REST API에 어떠한 메서드도 포함되어 있지 않다며 에러가 발생했습니다.

문제 해결

먼저 API Gateway의 생성 순서는 다음과 같습니다.

  • API Gateway의 API 생성 → API 메서드 생성 → 스테이지 생성(배포)

상기와 같은 세 가지 과정을 거칩니다. 하지만, CloudFormation으로 API Gateway를 생성하면 다음과 같은 과정을 거칩니다.

  • API Gateway의 API 생성 → 스테이지 생성(배포) → API 메서드 생성

API를 생성하고 나서, 곧 바로 배포를 시도하기 때문에 API에 메서드가 생성되지 않은 API Gaetway에서 에러가 발생합니다. 이러한 문제를 해결하기 위해서 CloudFormation에서는「DependsOn」이라는 속성을 제공하고 있습니다.

이 「DependsOn」속성은 특정 리소스가 다른 리소스 다음에 생성되도록 지정할 수 있습니다. 「DependsOn」을 사용할 경우 API Gateway의 생성 순서를 다음과 같이 설정할 수 있습니다.

  • API Gateway의 API 생성 → API 메서드 생성 → 스테이지 생성(배포)

「DependsOn」에 대한 상세한 내용은 아래 공식 문서를 참고해 주세요.

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

ApiGatewayDeployment:
    Type: AWS::apigateway::Deployment
    Properties:
      RestApiId: !Ref ApiGatewayRestApi
      StageName: !Sub ${SystemName}-${EnvName}-stage
    DependsOn: 
      - ApiGatewayMethod

API Gateway를 배포하는 소스 코드에 DependsOn을 추가하여 메서드가 먼저 생성된 다음 베포를 하도록 설정합니다.

jw-apiclofrerror-2

다시 스택을 생성해 보면, 성공적으로 CloudFormation 스택이 생성된 것을 확인할 수 있습니다.

jw-apiclofrerror-3

API Gateway로 들어가서 스테이지를 확인해 보면, 성공적으로 스테이지가 생성되어 API가 배포된 것을 확인할 수 있습니다.

jw-apiclofrerror-4

API Gateway와 통합하고 있는 Lambda가 있으므로 API 엔드포인트로 들어가서 확인해 보면 성공적으로 API를 배포되었음을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 kis2702@naver.com로 보내주시면 감사하겠습니다.

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.